#!/bin/bash

# 检查是否传递了参数
if [ "$#" -lt 1 ]; then
    echo "Usage: $0 {build|clean|run|deps|run-execlTohostJson|...|run-all} [BINARY_NAME]"
    exit 1
fi

ACTION=$1
BINARY_NAME=${2:-} # 如果提供了第二个参数，使用它作为BINARY_NAME

# 获取脚本所在的目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

# 推断 Makefile 所在的目录（假设 Makefile 在脚本目录的上一级）
MAKEFILE_DIR="$(dirname "$SCRIPT_DIR")"

# nohup.out 文件路径
NOHUP_FILE="$SCRIPT_DIR/nohup.out"

# binary_name 文件路径，用于存储和读取 BINARY_NAME
BINARY_NAME_FILE="$SCRIPT_DIR/.binary_name"

# 检查 nohup.out 文件是否存在，如果不存在则创建
if [ ! -f "$NOHUP_FILE" ]; then
    touch "$NOHUP_FILE"
fi

# 如果提供了 BINARY_NAME，则将其保存到文件中
if [ -n "$BINARY_NAME" ]; then
    echo "$BINARY_NAME" > "$BINARY_NAME_FILE"
elif [ -f "$BINARY_NAME_FILE" ]; then
    # 如果没有提供 BINARY_NAME 但文件存在，则从文件中读取
    BINARY_NAME=$(cat "$BINARY_NAME_FILE")
fi

# 根据参数执行相应的 make 命令
case "$ACTION" in
    build)
        echo "===== Starting $ACTION with BINARY_NAME=$BINARY_NAME at $(date) =====" >> "$NOHUP_FILE"
        BINARY_NAME=$BINARY_NAME make -C "$MAKEFILE_DIR" $ACTION &>> "$NOHUP_FILE"
        ;;
    clean)
        # 清理时，需要确保使用之前存储的 BINARY_NAME
        if [ -n "$BINARY_NAME" ]; then
            echo "===== Cleaning with BINARY_NAME=$BINARY_NAME at $(date) =====" >> "$NOHUP_FILE"
            BINARY_NAME=$BINARY_NAME make -C "$MAKEFILE_DIR" $ACTION &>> "$NOHUP_FILE"
            # 清理操作完成后，删除 BINARY_NAME 文件
            rm -f "$BINARY_NAME_FILE"
        else
            echo "No BINARY_NAME specified or found. Please provide a binary name or run a build first."
            exit 1
        fi
        ;;
    run|deps|run-execlTohostJson|run-execToServiceJson|run-execToServiceURLJson|run-execToAllJson|run-host|run-icmp|run-telegraf|run-interface|run-service|run-registerServices|run-all)
        echo "===== Starting $ACTION with BINARY_NAME=$BINARY_NAME at $(date) =====" >> "$NOHUP_FILE"
        BINARY_NAME=$BINARY_NAME make -C "$MAKEFILE_DIR" $ACTION &>> "$NOHUP_FILE"
        ;;
    *)
        echo "Invalid option: $ACTION"
        echo "Usage: $0 {build|clean|run|deps|run-execlTohostJson|...|run-all} [BINARY_NAME]"
        exit 1
        ;;
esac